home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / assembler / progasm1.lha / LEZIONI / LEZIONE1.TXT < prev    next >
Text File  |  1995-06-10  |  68KB  |  1,105 lines

  1.  
  2.       CORSO COMPLETO DI PROGRAMMAZIONE ASSEMBLER IN DUE DISCHI
  3.  
  4.             BY FABIO CIUCCI - 1994/95
  5.  
  6. Per tutti coloro che hanno provato ad imparare a fare demo o giochi che
  7. sfruttino l'hardware di Amiga direttamente, ma non ci sono mai riusciti
  8. perche' i libri erano scritti in maniera astratta e astrusa e i sorgenti
  9. di esempio, i listati cioe', erano poco commentati o troppo difficili,
  10. oppure per quelli che non ci hanno mai provato e si chiedono come si fa.
  11.  
  12. Devo ringraziare e salutare tutti coloro che hanno contribuito materialmente o
  13. moralmente alla realizzazione di questi due dischetti, in particolare:
  14.  
  15. Luca Forlizzi (The Dark Coder)
  16. Andrea Fasce (Executor/RAM JAM)
  17. Sirio Zuelli (PROXIMA DESIGN)
  18. Alberto Longo (VIRTUAL DREAMS)
  19.     
  20. Nonche' coloro che hanno testato le lezioni verificando se capivano o meno:
  21.  
  22. Andrea Scarafoni, Federico "GONZO" Stango, e altri.
  23.  
  24. Devo infine salutare la mia ragazza, Kety, la quale si e' impegnata a farmi
  25. stare il meno possibile al computer.
  26.  
  27. Nella mia carriera di programmatore hobbista posso vantare la realizzazione
  28. di alcude demo/intro per delle BBS, ad esempio "AMILINK.EXE", per la
  29. banca dati AmigaLink, oppure per dei Club, come quella per il nuovo "Amiga
  30. Expert Team". Le mie "opere" maggiori sono la mia prima demo per il chipset
  31. AGA, il "WORLD OF MANGA", che e' stata pubblicata anche su alcune riviste, e
  32. il "NAOS", che ho programmato per il gruppo NOVA ACIES.
  33.  
  34. Devo precisare che sarebbe bene sapere almeno un poco di DOS prima di
  35. accingersi a leggere il mio corso, se non altro per sapere come salvare i
  36. listati! Dovreste aver trovato un manuale assieme all'Amiga...
  37. Comunque, in breve, nei dischi (sia Hard che Floppy) i dati sono immagazzinati
  38. in "file", ossia una serie di numerini uno dopo l'altro, che insieme possono
  39. formare file grafici, musicali, eseguibili, listati eccetera.
  40. Da notare che un dischetto vergine per poter essere utilizzato deve essere
  41. FORMATTATO, altrimenti e' impossibile scriverci.
  42. Una volta formattato, ci si puo' salvare qualsiasi file, sia figure con
  43. programmi di grafica, che testi (come questo che state leggendo) che altro.
  44. Un file si puo' copiare da un disco ad un altro, si puo' cancellare, oppure
  45. gli si puo' cambiar nome, eccetera. In un disco ci possono molti file, fino
  46. a che non si riempiono gli 880Kb circa, magari con 2 file da 400Kb o con una
  47. trentina di file piu' piccoli. Da notare che all'interno di un disco, per
  48. fare un po' di ordine, si possono generare varie "subdirectory", ossia dei
  49. "cassetti" piu' piccoli, delle divisioni in cui mettere i file.
  50. Ad esempio si possono generare le subdir DISEGNI e TESTI, in cui copieremo
  51. o salveremo rispettivamente delle immagini e delle lettere per la fidanzata,
  52. in modo da non mettere disegni e testi insieme sciolti nella dir principale.
  53. E' come se il disco fosse un armadio, e le subdir dei cassetti di questo
  54. armadio. Dato che si possono fare delle subdir dentro le subdir, ognuno di
  55. questi cassetti puo' contenere file sciolti o "scatole" con file o altre
  56. "scatoline" piu' piccole dentro. Dunque un sistema simile a quello dei mobili!
  57. Per eseguire le operazioni tra i file si puo' usare la CLI/SHELL, in cui
  58. occorre scrivere dei comandi come:
  59.  
  60. Dir        = Elenca i file e le subdir contenute in un disco
  61. Copy        = Copia i file
  62. Delete        = Cancella un file (ATTENZIONE AD USARE QUESTO!!!)
  63. Makedir        = Crea un "cassetto" (o subdir)
  64.  
  65. Oppure si puo' agire col mouse da WorkBench, dove i file sono "raffigurati"
  66. come icone e le subdir come cassetti.
  67. Da notare che il drive interno si chiama "df0:", quelli esterni "df1:", "df2:"
  68. eccetera. L'hardisk di solito si chiama "Dh0:" (o "Hd0:").
  69. Un sistema piu' veloce e' quello di usare utility come DiskMaster o DirOpus.
  70. Dunque quando avrete scritto qualche listato, lo dovrete salvare in un
  71. disco formattato, o sull'Hard Disk in quale subdir.
  72. Altra cosa da sapere e' come si fa a fare un disco "autoboot", ossia che parte
  73. automaticamente inserendolo nel drive all'accensione o dopo un reset.
  74. Supponiamo di aver salvato un nostro programma ESEGUIBILE in un dischetto,
  75. col nome "mioprogramma". Occorrera' fare una subdirectory "S", in cui salvare
  76. un file di testo col nome di "startup-sequence", in cui sia scritto il nome
  77. del programma da caricare automaticamente:
  78.  
  79. mioprogramma
  80.  
  81. La startup-sequence si puo' scrivere (editare) anche con il programma con cui
  82. state leggendo, che fa anche da text-editor. Ultima cosa, occorre "installare"
  83. il disco in questione, digitando da cli/shell il comando:
  84.  
  85. Install df0:
  86.  
  87. Oppure "install df1:" se si insetisce il dischetto nel drive esterno.
  88.  
  89. Detto questo, si puo' continuare con le note.
  90.  
  91. NOTA: Se volete installare il corso sull'hard disk, ricordatevi di copiare
  92. nella vostra directory s: il file "TRASH'M-ONE16.pref" che si trova nella
  93. directory S: del disco del corso.
  94.  
  95. NOTA2: Se volete stampare i listati, considerate che sono compressi col
  96. powerpacker, per cui vi serve il PowerPacker Patcher, quello usato in questo
  97. corso. (il file e' quello chiamato "PP" nella directory "C").
  98. Per installarlo, basta avere in LIBS: la "powerpacker.library" ed eseguire il
  99. comando "PP". I listati saranno autoscompattati al caricamento.
  100.  
  101. In questo corso verranno trattati i vari argomenti della programmazione, come
  102. il COPPER, gli SPRITE, il BLITTER, nonche' il nuovo chipset AGA e la
  103. programmazione della scheda video PICASSO II.
  104. Nel disco 1 gli argomenti sono: 68000,copper,playfields e sprites.
  105. Il blitter, l'AGA e il resto sono nei dischi 2 e 3, non del tutto terminati.
  106.  
  107. Per quanto riguarda la distribizione e la copia di questo corso, dovete sapere
  108. che e' GiftWare/Shareware e non propriamente di pubblico dominio.
  109. Con questo intendo che potete copiare ai vostri amici questo corso senza
  110. problemi, basta che non lo VENDIATE per soldi, dato che i diritti su questo
  111. corso sono dell'autore, cioe' me, e non certo del primo furbacchione che vuole
  112. speculare sul lavoro altrui. D'altronde, se e' vero che lo potete copiare e
  113. distribuire AL SOLO PREZZO DEI DISCHI VERGINI, dovete anche ricordarvi che
  114. se seguite con successo le varie lezioni, riuscendo a programmarvi qualche 
  115. cosa, avete tratto giovamento dal mio lavoro, per cui DOVETE ringraziarmi in
  116. qualche modo, specialmente se diventate i programmatori piu' ricchi del mondo
  117. (beh, nell'eventualita'...). Questo ringraziamento e' quantificabile a vostro
  118. piacere, preferisco biglietti da 10.000.
  119. L'eventuale afflusso di regalucci o, meglio, vile denaro, mi incoraggerebbe a
  120. proseguire l'hobby della programmazione Amiga, e anche a fare nuovi capitoli
  121. del corso. L'indirizzo e':
  122.  
  123.     Fabio Ciucci
  124.     Via S.Leonardo, 13
  125.     55100 LUCCA
  126.  
  127. Mi farete anche un grande favore se copierete a tutti i vostri amici questo
  128. disco 1 del corso, anche se a voi personalmente non interessasse, perche'
  129. darete la possibilita' a qualcun'altro di averlo e di imparare a programmare.
  130. Ho deciso di scrivere un corso di ASM (assembler) perche' 10000 persone me
  131. lo hanno chiesto, e considerato che lo faccio per divertimento l'ho scritto
  132. in maniera molto discutibile, ma, a mio avviso, risultera' piu' chiaro ai
  133. principianti i quali, una volta iniziato a capire, potranno continuare piu'
  134. approfonditamente. Chi e' gia' esperto di ASM trovera' divertenti le
  135. lezioni, magari ci trovera' delle inesattezze, percio` gli consiglio di
  136. consultare direttamente i listati di esempio: questo corso e' per chi parte
  137. da zero. Infatti, dalla mia esperienza personale e da quello che mi dicono
  138. gli aspiranti "CODER" (in gergo programmatori CATTIVI), il problema e'
  139. proprio capire il tutto e fare i primi due o tre programmini, dopodiche'
  140. si diviene in grado di continuare da soli. Mi propongo, dunque, di insegnare
  141. a far girare delle palline per lo schermo o a farci saltellare una scritta
  142. a chi non sa nemmeno cosa sia il 68000. Se poi costoro vorranno diventare
  143. programmatori di giochi ed entrare nel TEAM 17 bastera' che continuino.
  144.  
  145. PER IMPARARE A PROGRAMMARE UN GIOCO TIPO GODS O PROJECT X O COMUNQUE
  146. UN GIOCO CHE NON SIA UN SIMULATORE DI VOLO O UNO 3D, CHE INSOMMA NON
  147. COMPRENDA CUBETTI CHE RUOTANO, TUNNELL SINUSOIDALI O DISTORSIONI
  148. PROSPETTICHE, FRATTALI O TEXTURE MAPPING, GARANTISCO CHE BASTA AVERE
  149. LE COGNIZIONI DI MATEMATICA DI TERZA MEDIA.
  150.  
  151. Con questo voglio togliere dalla testa a tutti che la programmazione assembler
  152. dell'Amiga sia piena di matematica. IO CREDO INVECE CHE NON C'ENTRI NULLA.
  153. Se si intende fare un programma di matematica, si deve conoscere la
  154. matematica, come se si vuol fare un gioco del calcio bisogna conoscere il
  155. calcio.
  156. L'importante e' conoscere come funziona l'Amiga, il suo processore (nel caso
  157. dell'Amiga un Motorola 68000) ed i suoi chip custom (ossia quelli dedicati a
  158. fare la grafica ed il suono).
  159. Personalmente ho fatto le superiori all'Istituto d'Arte della mia citta',
  160. ed ho imparato a fare cosucce in ASM gia' quando ero alle medie, quindi
  161. basta usare bene il tempo che si tiene acceso l'Amiga, anziche' giocarci:
  162. non serve frequentare la facolta' di informatica all'universita', dove non
  163. insegnano certo a programmare giochi o demo sull'Amiga!!!
  164.  
  165. Ma perche' imparare a programmare giochi o demo? E cosa sono le demo?
  166. Dunque, i giochi cosa sono lo sanno tutti, quindi si suppone che chi voglia
  167. imparare a programmarli si sia stancato di vedere giochi che non sono come
  168. vorrebbe, e si vuole fare il "SUO", come vuole lui, pixel per pixel.
  169. Per quanto riguarda le demo invece occorre fare una breve spiegazione.
  170. Demo sta per "demonstration", ossia dimostrazione grafica.
  171. Dimostrazione di cosa?
  172. Della potenza dell'Amiga e della bravura dei programmatori, naturalmente.
  173. Comunque c'e' qualcosa di piu': LA SCENA.
  174. Non quella del teatro, ma l'"AMIGA SCENE" (in inglese, la lingua ufficiale
  175. della scena stessa). Immaginatevi la scena della musica: ci sono vari gruppi
  176. con cantanti, batteristi, eccetera. Per l'Amiga, invece, troviamo vari gruppi
  177. con CODER (programmatori), GFX ARTIST (grafici), MUSICIANS (musicisti), che
  178. invece di fare un "VIDEO" come quelli che fanno i gruppi della scena musicale
  179. come loro contributo, fanno una "DEMO", che si aggiunge alle altre fatte
  180. da altri gruppi in tempi e luoghi diversi. Ci sono poi gli "SWAPPER" e i
  181. "TRADER" che sono rispettivamente coloro che scambiano e distribuiscono le
  182. demo via posta o via modem... costoro non producono niente, ma hanno una
  183. importanza nella scena, perche' una cosa che non circola e' come se non ci
  184. fosse. D'altronde, costoro aspirano a diventare CODER, GRAFICI o MUSICISTI,
  185. per contribuire a fare una DEMO, anziche' scambiare opere altrui.
  186. Ci sono molti gruppi nell'"Amiga Scene", che hanno membri in tutti il mondo,
  187. in particolare in Europa. I nomi di alcuni gruppi piu' famosi sono
  188. ANDROMEDA, BALANCE, COMPLEX, ESSENCE, FAIRLIGHT, FREEZERS, MELON DEZIGN,
  189. POLKA BROTHERS, PYGMY PROJECTS, RAM JAM, SANITY, SPACEBALLS...
  190. Da notare che ogni membro della scena si fa chiamare con uno pseudonimo,
  191. detto "handle". Insomma, un nome d'arte: per esempio due coder degli ANDROMEDA
  192. si fanno chiamare "Dr.Jeckyll" e "Mr.Hyde", uno dei FREEZERS si fa chiamare
  193. "Sputnik", poi altri di vari gruppi sono: Hannibal, Dan, Paradroid, Dak,
  194. Wayne Mendoza, Performer, Bannasoft, Laxity, Vention, Psyonic, Slammer, Tron,
  195. Mr. Pet, Chaos, Lone Starr, Dr. Skull, Tsunami, Dweezil.....
  196. Il nome completo si indica con l'andle seguito dal gruppo di appartenenza,
  197. ad esempio CHAOS/SANITY, DWEEZIL/STELLAR, DAK/MAD ELKS, e cosi' via.
  198. Io, per la scena, sono "RANDY/RAM JAM", ma ovviamente Fabio Ciucci per chi
  199. rimarrebbe perplesso, non conoscendo l'argomento.
  200. La scena organizza dei PARTY, delle specie di feste-ritrovo, dove i gruppi
  201. portano la loro demo, e ci sono delle competizioni con votazioni e premi
  202. anche di milioni per i vincitori.
  203. Alcuni coder di demo poi passano a fare i giochi, dato che l'argomento e'
  204. sempre quello. Ad esempio il programmatore di BANSHEE e' HANNIBAL/LEMON.,
  205. quello di ELFMANIA e' SAVIOUR/COMPLEX, quelli di STARDUST sono DESTOP/CNCD e
  206. SCY/CNCD, e la lista potrebbe continuare...
  207. Comunque nel disco 2 e' presente una lezione solo sulla SCENA.
  208.  
  209. Ritornando alla programmazione assembler, sia che vogliate fare demo o giochi,
  210. vi sconsiglio di cominciare ad imparare studiando i listati di routines 3d
  211. (routine=parte di un listato o programma), perche' sono le piu'
  212. complesse, che io stesso digerisco male, non per la programmazione in se'
  213. ma per le formulacce di matematica che contengono.
  214. Ma attenzione! Non dovete nemmeno pensare che se non serve la matematica
  215. servano conoscenze di elettronica o che sia necessario studiare gli schemi
  216. elettrici di Amiga!!! Quello va fatto solo se volete fare un programma
  217. per gestire una scheda grafica o un digitalizzatore video o simili.
  218. Vi assicuro che potete, ad esempio, far apparire sullo schermo una figura
  219. o suonare una musica senza conoscere di dove passano i fili!!!
  220. Conosco persone che hanno imparato l'assembler a 12 anni e altre che lo hanno
  221. imparato a 30 o 40, senza conoscere bene la matematica e senza conoscere
  222. l'inglese. Quindi nemmeno l'eta' e' una scusa accettabile per non provare!
  223. GIA! PERCHE' DOVETE TOGLERVI DALLA TESTA ANCHE CHE E' INDISPENSABILE LA
  224. CONOSCENZA DELL'INGLESE!
  225. Devo ammettere, pero`, che la conoscenza dell'inglese puo' rendere piu' facile
  226. il tutto, perche' i comandi ASM sono abbreviazioni di parole inglesi, tipo SUB
  227. e ADD che significano SOTTRAI e ADDIZIONA.
  228. La conoscenza del WorkBench e dell'Amigados non vi saranno utili per la
  229. programmazione in se, in quanto il computer in realta' funziona molto
  230. diversamente. Io direi, in maniera piu' semplice, che queste "sovrastrutture"
  231. sono il sistema operativo, localizzato nel chip del kickstart, senza il
  232. quale all'accensione non comparirebbe nemmeno la schermata che chiede di
  233. inserire il dischetto. Le finestre che vedete e spostate sono il frutto di
  234. migliaia di linee di codice ASM, contenute nel kickstart, infatti basta vedere
  235. la differenza delle finestre tra il kick 1.3 e il kick 2.0, che non sono dovute
  236. alla differenza dei dischi inseriti, ma alle differenze nel kick stesso.
  237. Se volete fare programmi stile DeLuxe Paint, Gestione casalinga, word
  238. processor, o comunque utility per workbench che aprano le loro finestrelle
  239. su cui selezionare i gadget e i menu a tendina, vi consiglio di imparare il
  240. linguaggio C anziche' l'ASM, in quanto e' piu' indicato e una volta imparato
  241. potete convertire i vostri listati facilmente all'ambiente MS-DOS e WINDOWS,
  242. nel caso che voleste abbandonare (o tradire?) l'Amiga.
  243. Se invece siete affascinati dalle demo grafiche con le palline rimbalzanti
  244. e le scritte metallizzate e sognate di programmare giochi tipo AGONY,
  245. LIONHEART, SHADOW OF THE BEAST, TURRICAN, APYDIA, PROJECT X, SUPERFROG,
  246. ZOOL, GODS, CHAOS ENGINE, XENON II, LOTUS ESPRIT, e mettiamoci anche
  247. SENSIBLE SOCCER, sia chiaro che si possono fare solo in ASSEMBLER PURO!!!
  248. e non richiedono particolari conoscenze di matematica: bastano le classiche
  249. addizioni, sottrazioni, moltiplicazioni e divisioni, e qualche tabella di
  250. SENI e COSENI per fare, ad esempio, le palline che cadono con una traiettoria
  251. a parabola, o comunque seguendo una curva: queste tabelle non sono altro che
  252. una serie di numeri in memoria tipo 1,2,3,5,8,10,13,15,18,23 che sono, ad
  253. esempio, la progressione della posizione orizzontale e un'altra serie di
  254. numeri che sono la progressione della posizione verticale; queste serie di
  255. "tabelle" o SINUSTAB, cioe' una serie di numeri che definiscono le coordinate
  256. di una curva, possono essere costruite con un apposito comando, il CS,
  257. presente nell'ASMONE, l'assemblatore, anche senza conoscere esattamente la
  258. trigonometria, puo' bastare sapere i parametri da passare e fare delle
  259. prove. Di queste SINUSTAB o TABELLE ce ne sono molte nei giochi e nelle demo,
  260. in quanto molti movimenti ondeggianti non sono calcolati del tutto sul
  261. posto. Se invece sognate di fare delle ADVENTURE tipo MONKEY ISLAND, o
  262. dei giochi manageriali, in cui appaiono cioe' solo schermate grafiche ferme
  263. con qualche ometto che ci si muove dentro lentamente, in cui il gioco consiste
  264. nel selezionare con il mouse degli oggetti o delle scritte, allora si puo'
  265. usare anche il linguaggio C, perche' il gioco potrebbe essere convertito
  266. facilmente su PC, dove si farebbero un bel po di soldoni.
  267. D'altronde il C del PC lo insegnano nelle scuole scientifiche, e molto bene
  268. nelle universita' informatiche, e i soldoni li faranno loro.
  269.  
  270. NOTA: conoscere l'assembler dell'Amiga puo' rivelarsi utile se si passa, in
  271. seguito, a programmare anche un altro tipo di computer con lo stesso
  272. microprocessore, ossia il Motorola 68000 che, per fare un esempio, e' usato da
  273. computers quali Apple MacIntosh e Atari ST.
  274. Questi computer hanno pero' diversi sistemi operativi (diversi dal
  275. kickstart Amiga) e diversi chip dedicati alla grafica ed al suono, dunque
  276. vi servira' la conoscenza delle istruzioni del 68000, ma non quella del
  277. sistema operativo Amiga e dei suoi chip grafici, dovrete imparare da capo;
  278. d'altronte anche con linguaggi come il C dovrete imparare il nuovo sistema
  279. operativo.
  280. Se ad esempio usate il linguaggio C e fate un programma per WorkBench
  281. che apre le finestre e magari fa dei disegni tipo montagnine, nel caso
  282. che compraste (che errore!) un PC MSDOS e voleste rifarvelo su WINDOWS, le
  283. parti del vostro programma inerenti ai calcoli per fare le montagnine e
  284. la struttura generale la potreste riutilizzare, ma tutta la parte inerente
  285. all'apertura delle finestre workbench e dei suoi gadget di selezione la
  286. dovreste buttare e sostituire con le istruzioni per Windows, e vi assicuro
  287. che imparare un altro sistema operativo e convertire un programma costa
  288. dei mesi o degli anni.
  289. NOTA: un programma scritto in assembler 68000 funziona benissimo sugli altri
  290. processori piu' potenti,a patto che si siano tenute presenti alcune cose.
  291.  
  292. Se state leggendo ancora significa che siete imperterriti. Allora completo la
  293. lista delle utilita' dell'assembler... (il linguaggio in sé si dice ASSEMBLY,
  294. il programma che lo compila si dice ASSEMBLER, ma e' uso comune chiamare
  295. ASSEMBLER anche il linguaggio). Innanzitutto l'assembler rimane il linguaggio
  296. piu' veloce, specialmente se lo sapete bene, e la stessa cosa fatta con un
  297. altro linguaggio sara' sempre piu' lenta di una fatta in assembler.
  298. Poi rimane anche l'unico mezzo per creare effetti GRAFICI speciali, mai visti
  299. prima: potete ottenere effetti speciali anche con un titolatore, ma potete
  300. fare SOLO quelli definiti dal programma. Infatti non e' difficile scoprire
  301. con che programma e' stata fatta una titolazione o un effetto speciale; lo
  302. stesso vale per i DEMO MAKER, di cui il migliore e' il TRSI DEMOMAKER, che
  303. ha degli effetti interessanti, ma ormai anche i bambini riconoscono una cosa
  304. fatta col demomaker, perche' c'e' sempre la scritta dorata sopra e sotto
  305. e al centro o le palline o le stelline... E BASTA!!! non se ne puo' piu'!
  306. Imparando a programmare in assembler, invece, si possono inventare degli
  307. effetti mai visti prima, perche' non si è limitati a dover scegliere tra
  308. una ventina di effetti pronti per l'uso che altre migliaia di persone hanno
  309. usato, riempiendo reti televisive private e dischi.
  310. Per darvi un'idea dell'infinita varieta' di cose che potete inventare in
  311. assembler posso nominare la SPACEBALLS "state of the art" DEMO, una delle
  312. piu' conosciute, che non e' difficile da programmare e ha stupito per le
  313. figure stilizzate di donne che ballano in mezzo a degli effetti speciali;
  314.  
  315. Se un programmatore ha piu' pazienza puo' anche programmare un gioco, dapprima
  316. per giocarselo, per il gusto di farsi il gioco dei sogni, per sperimentare i
  317. veri limiti dell'Amiga, per vedere quanti ometti si riesce a muovere senza
  318. rallentare lo schermo, poi nulla vieta di provare a fare un gioco commerciale,
  319. che richiede anche la collaborazione di grafici e musicisti, nonche' tutta
  320. la parte relativa alla commercializzazione che spesso premia piu' la
  321. pubblicita' fatta al gioco che la sua effettiva validita', a parte i casi in
  322. cui la validita' e' tanta che il successo arriva comunque.
  323. Perche' non mettersi a fare un gioco per CD32?? Basta fare un gioco AGA che
  324. sfrutti i 600MB di capienza del CD: per esempio un gioco in cui lo sfondo
  325. sia un "FILM" caricato in tempo reale, su cui far girottolare un RAMBO
  326. ammazzatutti o un'astronave. La difficolta' non sta ne' nell'imparare il
  327. nuovo chipset AGA, ne' nell'adattamento per CD, infatti il chipset AGA e'
  328. molto simile a quello normale, basta impararsi qualche registro nuovo, e
  329. il processore funziona allo stesso modo, mentre per quanto riguarda la
  330. gestione del CD e' ancora piu' facile, perche' basta studiarsi i 2 dischi del
  331. "CD 32 DEVELOPER KIT" che circola tra i programmatori. Dunque l'assembler
  332. alle soglie del 2000 puo' essere ancora all'avanguardia, ovviamente per certi
  333. compiti in particolare, e se la tecnologia del 2000 sara' tutta su CD, come
  334. auspicano coloro che si comprano il PC per giocare ai giochi del CD o spesso
  335. per vedercisi le donne nude, dato che i CD sul PC MDDOS sono in maggioranza
  336. slideshow sexy, anche l'Amiga avra' il suo software su CD, che potrebbe essere
  337. sviluppato da qualche tizio che un giorno comincio' la sua avventura leggendo
  338. un certo corso di programmazione.... Conoscendo come funziona il tutto, si puo'
  339. anche capire come funzionano certi programmi o giochi e si possono modificare
  340. delle sue parti: ad esempio si puo' capire come mai un gioco o un programma
  341. non funziona sui nuovi modelli Amiga e si puo' modificare per farlo funzionare,
  342. si possono fare certe modifiche ai programmi, per fare un esempio ho modificato
  343. una utility in modo che usasse la memoria virtuale su disco sull'Amiga 4000,
  344. altre volte ho velocizzato dei programmini PD, di cui ho "rubato" e velocizzato
  345. le parti piu' importanti. Infine si possono fare i cosiddetti trainer, le vite
  346. infinite, si trovano cioe' le parti di listato che sottraggono una vita al
  347. povero PLAYER 1 e si modifica il tutto, magari facendo aumentare le vite
  348. quando si e' ammazzati... per vedere e capire come funziona un gioco o un
  349. programma pero' e' necessario conoscere VERAMENTE bene l'ASM e disporre di
  350. un monitor L.M o meglio di una cartuccia tipo ACTION REPLAY (Il monitor L.M.
  351. e' un'utilita' che permette di disassemblare, cioe' visualizzare le istruzioni
  352. presenti in una sezione di memoria, e se si trova in che punto della memoria
  353. sono le istruzioni che tolgono una vita, si puo' modificare il tutto..
  354. L.M sta per Linguaggio Macchina, cioe' linguaggio del microprocessore, che
  355. e' quello prodotto dall'assemblatore). Queste operazioni comunque sono una
  356. cosa difficile, e cominciare tentando di far diventare verde un ometto blu
  357. in un gioco non e' certo utile. Ho visto tanti ragazzi sciupare il loro
  358. tempo andando a caso con i monitor L.M. e le cartucce tentando invano di fare
  359. non si sa cosa, cambiando le scritte nei programmi o nei listati, senza
  360. capirli, dicendo che li avevano fatti loro o che ci avevano fatto non si
  361. sa quali importanti modifiche. Costoro tutt'oggi non sanno visualizzare
  362. un'immagine in assembler; in gergo questi ciarlatani sono detti LAMER.
  363.  
  364. Facciamo il punto della situazione: se siete uno di quei diciottenni classici
  365. bianchicci e gobbi, senza donne, e state andando a caso con i monitor LM
  366. per la memoria del vostro povero Amiga, vantandovi di essere un grande hacker,
  367. allora vi consiglio di posare il monitor e seguirmi per la retta via.
  368. Anche io ho cominciato in quella maniera ridicola (a 8 anni pero'! non a 18!),
  369. ma poi mi sono ravveduto e ho cominciato a leggere i libri senza saltare le
  370. pagine. Ecco un libro che vi potrebbe servire:
  371.  
  372. IL MANUALE DELL'HARDWARE DELL'AMIGA, della IHT: Questo manuale spiega
  373. come funzionano i CHIP CUSTOM, quelli che fanno la grafica ed il suono
  374. dell'amiga, nonche' come pilotare il DISK DRIVE eccetera.
  375. Questo e' indispensabile, ma per visualizzare anche una sola immagine
  376. bisogna conoscere anche il 68000, essendo il 68000 che gestisce
  377. i chip grafici. Inoltre il tutto rimane una cosa astratta, una specie di
  378. sintetica serie di tabelle di riferimento, e non ci sono validi esempi.
  379. Molti esempi li potete comunque trovare nel mio corso!!!! Se sapete
  380. l'inglese cercate l'ultimo HARDWARE REFERENCE MANUAL, che e'aggiornato
  381. sui nuovi chip ECS. Comunque potete farne a meno per la durata del mio corso
  382. in quanto le cose principali ci sono, anche sui chip AGA dell'Amiga 1200.
  383. Inoltre nell'ASMONE e' incluso un comando, =C, che da una spiegazione
  384. di tutti i registri $DFFXXX, sia in generale che in particolare, ad esempio:
  385. =C 100 vi dara' una spiegazione del registro BLTCON0, concernente la
  386. risoluzione grafica, allo stesso modo =C 040 vi dara' un sunto del BLTCON0,
  387. reg. del BLITTER ($dff040).
  388.  
  389. I libri tipo ROM KERNEL MANUAL e PROGRAMMARE L'AMIGA volume 1 e 2 della IHT,
  390. non sono utili alla programmazione diretta all'hardware, quella che
  391. tentero' di insegnare in questo corso, ma sono utili a chi voglia fare
  392. programmi per il workbench o l'amigados, che usino il sistema operativo
  393. contenuto nel kickstart e nei disks del workbench... programmi con finestre
  394. intuition dunque, non schermate con palline ed equalizzatori o ometti
  395. saltellanti tra le fiammelle... dunque piu' utili ai programmatori in C.
  396. NON VE LI CONSIGLIO... programmare cosi' e' NOIOSISSIMO.
  397.  
  398. NOTA: Se, invece di essere utilizzatori bianchicci di monitor LM a caso, siete
  399. degli avidi ricercatori di giochi nuovi da copiare e da finire, passate ore al
  400. telefono a chiedere delle ultime novita', e le ore rimanenti a copiare
  401. con XCOPY e a giocare, magari sempre col trainer tanto per finire piu' in
  402. fretta, allora e' peggio che essere gobbi col monitor LM: o interrompete questo
  403. affanno della ricerca e della copia, o rimarrete degli ipertesi che non sanno
  404. assolutamente come mai gli si muovono gli ometti per lo schermo, ne saprete
  405. mai come farvelo da voi un trainer al gioco col menu e tutto, e vi assicuro
  406. che quando vi siete fatto un trainer da voi, poi non vi interessa piu' di
  407. finire il gioco, ma piuttosto di capire come funziona.
  408. Questa e'la differenza che c'e' tra il giocatore ed il creatore del gioco, tra
  409. il popolo assoggettato e stolto e i capi del regime che lo comandano facendogli
  410. passare notti insonni a finire (col trainer o meno) una miriade di giochi,
  411. non importa quali, basta che siano tanti e nuovi, copiati con l'XCOPY (che
  412. tra l'altro e' il peggior copiatore al mondo! usate il DCOPY piuttosto!).
  413. P.S: a proposito di donne, NON HO MAI VISTO NULLA PROGRAMMATO IN ASM DA UNA
  414. DONNA!!!! Se sta leggendo un rappresentante del sesso femminile, credo che
  415. questo sia un motivo in piu' per essere la prima!!! Una ragazza che, invece
  416. di interessarsi a pettegolezzi su persone sconosciute, o alle vetrine dei
  417. negozi, si metta a programmare robe pazzesche in gonna, credo che metterebbe
  418. in crisi di identita' un bel po di bambinoni che si ritengono intelligenti
  419. facendo vedere, alle (poche) ragazze che conoscono, quanto muovono bene la
  420. freccia del mouse o le finestrine del workbench, pensando che tanto non
  421. capiscono nulla e che gli possono inventare che sono dei geni e che stanno
  422. avendo dei collegamenti con la NASA, quando invece non sanno nemmeno formattare
  423. un dischetto.
  424.  
  425. Vi anticipo che la LEZIONE2.TXT, che leggerete con i suoi sorgenti esempio dopo
  426. questa LEZIONE1.TXT, e' la piu' DIFFICILE, quella FATIDICA, cioe' se riuscite
  427. a passarla il gioco e' fatto, perche' gia' dalla lezione 3 si fanno i primi
  428. effetti speciali col copper e procederete veloci come delle fucilate fino in
  429. fondo. Dunque vi chiedo di avere la pazienza di superare con calma e impegno
  430. la LEZIONE2.TXT, senza saltare niente.
  431.  
  432. Ora facciamo un'analisi dei programmi usati per programmare in assembly:
  433.  
  434. -L'ASSEMBLATORE e' il programma che traduce il listato fatto di comandi in
  435. formato simbolico (move, add...) nel suo equivalente binario (cioe' in bytes).
  436. Cioe' traduce un un testo, leggibile dal programmatore, nel formato reale delle
  437. istruzioni come le legge ed esegue il processore (una sequenza di numeri).
  438. Per esempio il comando "RTS" sara' trasformato in $4e75, e cosi' via.
  439. Questo rende umano programmare, perche' immaginatevi che roba programmare
  440. sapendo a memoria i numeri corrispondenti a ogni istruzione!!!!
  441. Programmare per NUMERI vorrebbe dire programmare in vero LINGUAGGIO MACCHINA,
  442. ossia L.M, ma e' inutile, si fa molto meglio in ASSEMBLY, cioe' usando delle
  443. parole convenzionali, dette COMANDI, al posto dei numeri reali.
  444. Questo codice binario risultante e' chiamato codice oggetto ed e' direttamente
  445. eseguibile dal computer, infatti puo' essere salvato il file eseguibile, oppure
  446. si puo'collaudare il programma.
  447. Ricordatevi che in assembler e' in uso anche la numerazione esadecimale!
  448. I numeri esadecimali sono quelli preceduti dal $, e sono in base 16, come
  449. spiegheremo, e possono contenere anche le lettere ABCDEF, come in $4e75.
  450. Si deve tenere presente che se il listato ha degli errori "grammaticali" ci
  451. viene comunicato dall'assemblatore, infatti ci sono delle precise regole a
  452. cui attenersi: ad esempio le LABEL (o ETICHETTE), devono cominciare
  453. dall'inizio della riga, ossia non devono essere precedute da spazi, e devono
  454. terminare con i due punti (:). Ad esempio una LABEL corretta e'
  455.  
  456. PIPPO:
  457.  
  458. Infatti il nome si da a piacere, e PIPPO va bene, perche' non contiene simboli
  459. come = + - eccetera, non ha spazi che la precedono, e termina con i :.
  460. Le label sono nomi che si danno qua e la' nel listato a delle cose, e servono
  461. per indicare quelle cose durante il programma, se per esempio si da nome
  462. PIPPO: a una certa serie di istruzioni, quando nel programma diremo che si
  463. deve eseguire PIPPO verranno eseguite le istruzioni sotto PIPPO, allo stesso
  464. modo possiamo mettere una label ad una figura o a una musica; la label dunque
  465. rappresenta l'indirizzo di memoria dove si trova, come il nome dei luoghi
  466. rappresenta la posizione di quei luoghi! Se voglio andare in Australia, vedro'
  467. una bella label AUSTRALIA: sopra di essa. Ricordatevi pero' che le LABEL
  468. servono a noi per orientarci, ma quando l'assemblatore trasforma tutto, nel
  469. codice oggetto non ci sono label, solo i numeri corrispondenti alle istuzioni.
  470.  
  471. Ci sono poi le istruzioni, che invece devono essere SEMPRE precedute da
  472. degli spazi, meglio se da un TAB (che fa 8 spazi in un colpo solo, e' il
  473. tasto sopra CTRL), e seguite dagli operandi, ad esempio:
  474.  
  475. PIPPO:
  476.     MOVE.L    $10,$20
  477.  
  478. In questo caso MOVE.L e' l'istruzione, mentre il primo operando e' $10 e il
  479. secondo e' $20. Alcune istruzioni necessitano di un solo operando e altre
  480. di nessun operando, ad esempio:
  481.  
  482.     CLR.L    $10
  483.  
  484. Necessita di un solo operando. Istruzioni come RTS non necessitano di operandi.
  485. Infine ci puo' essere un commento, utile per ricordarci cosa si sta facendo
  486. con le istruzioni: il commento si puo' scrivere dopo un punto e virgola (;).
  487.  
  488. PIPPO:                ; LABEL, che rappresenta l'indirizzo di MOVE.L
  489.     MOVE.L    $10,$20        ; istruzione a 2 operandi
  490.     CLR.L    $10        ; istruzione ad 1 operando
  491.     RTS            ; istruzione senza operandi
  492.  
  493. I commenti sono ignorati durante l'assemblaggio, quindi potete scrivere di
  494. tutto, basta che sia dopo i ;.
  495. Questa e' la grammatica. Seguendo queste semplici regole il programma viene
  496. assemblato. Poi che faccia quello che deve fare o no dipende da voi!!!
  497.  
  498. -Un EDITOR invece e' un programma che serve per scrivere o modificare i testi,
  499. nel nostro caso per scrivere i listati, che non sono altro che dei testi, fatti
  500. di parole chiave (move, add...) e commenti del programmatore (posti dopo i ;).
  501. I piu' potenti editor possono cercare, agganciare e sostituire caratteri.
  502. Solitamente ai listati assembly si da un nome che finisce con .ASM o .S, io
  503. personalmente preferisco .S, infatti quelli del corso finiscono in .S, mentre
  504. i testi da leggere finiscono in .TXT, ma il nome del file ovviamente non ha
  505. importanza per l'assemblatore, che lo carica comunque.
  506.  
  507. -Un MONITOR non e' in questo caso da intendersi come quello schermo su cui
  508. vedete le immagini dell'Amiga, ma un altro programma che permette di far vedere
  509. i contenuti della memoria, per esempio che numero c'e' all'indirizzo $100, e
  510. cosi' via. Solitamente i MONITOR hanno anche un DISASSEMBLATORE, ossia il
  511. contrario dell'ASSEMBLATORE, che ci permette di vedere la memoria come
  512. istruzioni, anziche' come numeri, ossia traduce i numeri nei rispettivi
  513. comandi simbolici (move, add...), in modo da rendere chiaro il funzionamento.
  514. Trasforma cioe' il LINGUAGGIO MACCHINA in ASSEMBLY, ossia ricostruire le
  515. istruzioni assembly che ogni numero rappresenta, riportando il CODICE OGGETTO
  516. alla forma originaria che avete usato nel listato. Per riprendere l'esempio
  517. usato per l'assemblatore, trasforma $4e75 in "RTS".
  518.  
  519. -Un DEBUGGER serve per collaudare il programma istruzione per istruzione,
  520. visualizzando gli effetti delle istruzioni ogni volta, e puo' indicare la
  521. causa del malfunzionamento del programma. Quindi consente di far eseguire il
  522. programma a pezzi, cioe' definire fino a quando eseguirlo, per controllare la
  523. situazione, e poi riprendere l'esecuzione, per trovare ogni errore.
  524. Infatti BUG significa ERRORE, in gergo; in inglese significa PULCE PESTIFERA,
  525. infatti gli errori di solito sono difficili da trovare nel programma; con il
  526. debugger si puo' verificare in che punto si verifica l'irregolarita'.
  527.  
  528. Alle volte il codice oggetto per poter funzionare effettivamente su un sistema
  529. operativo deve essere LINKATO con il LINKER, perche' i file eseguibili non
  530. sono semplicemente il blocco di istruzioni che avete assemblato, ma hanno
  531. delle parti che permettono di farlo caricare in memoria dal sistema operativo.
  532. Questo vale per i file .EXE e .COM del PC MSDOS e per i file eseguibili di
  533. qualsiasi altro sistema operativo, e' per questo che un eseguibile per Amiga
  534. non viene caricato da un ATARI ST o da un MACINTOSH, che pure hanno un 68000,
  535. proprio perche' il formato FILE e' diverso. Gli Amiga in particolare hanno gli
  536. HUNK, e per trasformare il codice oggetto in un file con HUNK, che possa essere
  537. eseguito clickandoci col mouse o caricandolo dallo SHELL, bisogna linkarlo.
  538. Per fortuna molti assemblatori hanno il linker incorporato, percui non occorre
  539. fare questo passaggio.
  540.  
  541. Ebbene, l'assemblatore incluso in questo corso, il TRASH'M'ONE, ha un EDITOR,
  542. un ASSEMBLATORE, un MONITOR/DEBUGGER e un LINKER!!! Ossia tutto in UNO!!!!
  543. E' la versione modificata PD (Ossia liberamente copiabile?) dell'Asmone.
  544.  
  545. A proposito dell'editor, potete cercare un testo premendo contemporaneamente
  546. i tasti AMIGA destro+SHIFT+S oppure selezionando col mouse (TASTO DESTRO)
  547. l'opzione Search nel menu' a tendina sotto la voce "Edit Funct."; a questo
  548. punto apparira' in alto a sinistra la scritta "Search for:", dove dovrete
  549. scrivere la parola (o le parole) da cercare. Puo' esservi utile intanto per
  550. ritrovare il punto dove siete arrivati nella lettura: se per esempio volete
  551. smettere qua per oggi, potete segnarvi la linea dove siete arrivati, in
  552. questo caso la 549 (indicata in fondo a sinistra), oppure il potete anche
  553. ritrovare questo punto del testo cercando una sua parola, per esempio "Funct",
  554. oppure "caso la 549", oppure "cercando", oppure quello che vi pare.
  555.  
  556. Normalmente, avremmo dovuto scrivere il nostro listato con un EDITOR, e
  557. salvare il listato (detto SORGENTE) con un nome a piacere.
  558. Poi avremmo dovuto caricare l'assemblatore, da cui caricare il listato,
  559. assemblare (cioe' trasformare dal testo a suo equivalente in L.M) e salvare il
  560. codice oggetto.
  561. Per collaudare il programma, ovvero controllare se funziona, avremmo dovuto
  562. eseguirlo dall'assemblatore, oppure linkarlo, rendendolo eseguibile, e farlo
  563. partire dal DOS. Per tornare a modificarlo avremmo dovuto cercare l'editor,
  564. ricaricare il listato, modificarlo, salvarlo, e rifare tutto l'assemblaggio.
  565. Sul PC MSDOS questo e' quello che si deve fare, infatti ho rinunciato a
  566. programmarci, mentre sull'Amiga col multitasking si possono caricare insieme
  567. l'EDITOR,l'ASSEMBLATORE ecc. Come se non bastasse, qualcuno ha inventato
  568. il mitico SEKA, simile all'attuale ASMONE, che aveva editor, assemblatore e
  569. monitor insieme. Con l'evoluzione siamo arrivati al MASTERSEKA, poi
  570. all'ASMONE e infine alle molte versioni modificate dell'ASMONE dai piu'
  571. svariati programmatori hobbisti. I due piu' accaniti modificatori (bravi!!)
  572. sono i TFA, che hanno fatto il TFA ASMONE, e DEFTRONIC, che ha fatto questo
  573. TRASH'M'ONE. Ho scelto quello di Deftronic perche' e' quello che ha meno BUG,
  574. infatti essendo modificati alla meglio questi ASMONE spesso assemblano fischi
  575. per fiaschi o si bloccano improvvisamente, ma non ci si puo' certo lamentare
  576. con loro che si divertono ad aggiungere opzioni senza guadagnare un soldo!
  577.  
  578. Il risultato finale e' che vi potete scrivere il listato, poi premendo ESC
  579. passate all'assemblatore/monitor, da cui potete assemblare (con "A"), oppure
  580. vedere i contenuti della memoria, sia come numeri che come istruzioni
  581. DISASSEMBLATE, potete verificare il funzionamento del programma, e infine
  582. salvare direttamente il FILE eseguibile con "WO".
  583. Per non fare confusione considerate che una cosa e' salvare il listato, ossia
  584. il SORGENTE, che e' un TESTO, un'altra e' salvare l'eseguibile, che e' un
  585. PROGRAMMA fatto di istruzioni nel formato FILE ESEGUIBILE.
  586. Il sorgente puo' essere scritto anche con un altro editor, come il CED, e
  587. poi potete caricarlo dall'ASMONE. Allo stesso modo un testo fatto con
  588. l'Asmone puo' essere caricato da un editor. L'Editor dell'Asmone quindi non
  589. e' che un normale EDITOR inserito in un assemblatore, con cui potete scrivere
  590. anche una lettera per la mamma, oppure modificare la STARTUP-SEQUENCE di un
  591. disco (Chi non sa cos'e', per favore si legga il manuale dell'AmigaDos!).
  592.  
  593. Ordunque, procedero' facendo chiarimenti e spiegando a modo mio come
  594. funziona il computer, per evitare fraintendimenti.
  595.  
  596. Quello che organizza tutto e' il microprocessore 68000, la CPU, ovvero
  597. Central Processing Unit, insomma il Boss... Il processore esegue delle
  598. istruzioni, infatti ha un set di istruzioni ben precise che sa eseguire,
  599. e che esegue una dopo l'altra (di seguito), a meno che nel suo cammino
  600. non trovi l'istruzione di saltare ad eseguire piu' avanti o piu' indietro,
  601. o di fare un certo numero di loop (o cicli). Nomino per esempio alcune
  602. istruzioni: MOVE, che significa "copia un valore da un posto ad un altro",
  603. ad esempio "move $10,$20" muove quello che e' in $10 nella locazione $20,
  604. oppure CLR, che significa AZZERA: "clr $10" azzera la locazione $10...
  605. (per LOCAZIONE intendo un punto della memoria accessibile dal processore)
  606.  
  607. A proposito! Il processore opera sulla memoria! Facciamo una mappa:
  608.  
  609. Quando le istruzioni operano con indirizzi minori di $200000 si sta operando
  610. nella CHIP RAM, ossia: da $000000 a $80000 ci sono i primi 512k di CHIP, quelli
  611. dei vecchi a500 o a2000, mentre se la RAM continua fino a $100000 significa che
  612. c'e' 1 MB di chip RAM, come negli a500+, a600 o nei nuovi a2000, se la memoria
  613. CHIP invece e' di 2MB, come negli a1200 o negli a500+ o a600 espansi, ad
  614. esempio, la chip va da $000000 a $200000. Insomma quando il processore lavora
  615. su indirizzi minori di $200000 ci troviamo in CHIP RAM, ad esempio:
  616.  
  617.     CLR.L    $30000
  618.     MOVE.L    $150000,$1a0000
  619.  
  620. Sono istruzioni che operano sulla CHIP RAM.
  621.  
  622. Quando invece operano su indirizzi da $200000 in avanti, ci troviamo in FAST
  623. RAM, ad esempio un a500 vecchio con 1MB di memoria, divisa in 512k di CHIP
  624. e 512k di FAST ha la memoria divisa in 2 pezzi:
  625.  
  626. 1)    da $000000 a $80000    ; i primi 512k di CHIP RAM
  627.  
  628. 2)    da $c00000 a $c80000    ; 512k di FAST RAM.
  629.  
  630. Potete verificare con utility come SYSINFO i blocchi di memoria che avete.
  631.  
  632. Poi ci sono delle zone di memoria speciali, come quelle della ROM Kickstart,
  633. ossia di solito da $fc0000 per kick 1.2 e 1.3 o $f80000 per kick 2.0 o 3.0.
  634. La ROM, a differenza della RAM, non puo' essere sovrascritta, si puo' solo
  635. leggere, e non si cancella quando si spenge il computer.
  636.  
  637. Un importantissimo indirizzo e' $dff000, in quanto quando le istruzioni
  638. operano su indirizzi che vanno da $dff000 a $dff1fe vengono azionati i
  639. CHIP CUSTOM della grafica e del suono, infatti per azionare la grafica
  640. bisogna mettere i valori giusti in questi indirizzi $dffxxx, detti anche
  641. REGISTRI, proprio perche' ognuno ha una funzione: provate a fare dalla
  642. linea di comandi (premendo ESC si scambia tra l'Editor e i comandi) il
  643. comando "=C", e vedrete il riassunto di quei registri, con il numero, in
  644. cui 000 sta per $dff000 e 100 sta per $dff100, e il nome, ad esempio
  645. $dff006 e' VHPOSR, mentre $dff100 e' BPLCON0. Questi indirizzi o si possono
  646. solo leggere, o si possono solo scrivere, per esempio $dff006 si puo'
  647. solo leggere, e $dff100 si puo' solo scrivere. Noterete una W o una R
  648. tra il numero e il nome: quelli che hanno una W sono quelli che si possono
  649. solo scrivere, (WRITE in inglese), quelli con la R si possono solo
  650. leggere (READ). Alcuni sono S (strobe) o ER (EarlyRead), ne parleremo in
  651. seguito quando li useremo.
  652.  
  653. Altri indirizzi speciali si trovano nella zona $bfexxx, ossia da $bfe001
  654. a $bfef01: si tratta di indirizzi collegati al chip CIAA, che si occupa di
  655. varie cose come fare da timer, ossia da cronometro, e di controllare le
  656. porte come la parallela (quella della stampante).
  657. Analoghi compiti li svolge il CIAB, connesso agli indirizzi $bfdxxx.
  658.  
  659. Quello che dovete ricordarvi in pratica e' che quando vedete un indirizzo
  660. del tipo $dffxxx o $bfdxxx o $bfexxx, stiamo operando su un registro CUSTOM,
  661. causando cose come il cambiamento dei colori dello schermo, o la verifica
  662. dei movimenti del joystick o del mouse, o altro ancora.
  663.  
  664. Per quanto riguarda la memoria RAM, sia CHIP che FAST, non vi interessera'
  665. sapere a che indirizzo si trova ogni istruzione, perche' l'assemblatore,
  666. come sapete, ci permette di usare le LABEL, al posto degli indirizzi: le
  667. metteremo solo nei punti utili, ci pensera' l'ASMONE poi a mettere gli
  668. indirizzi reali al posto delle label. Potremo vedere dopo a che indirizzo
  669. sono finite le nostre istruzioni, se ci interessera'.
  670.  
  671. Continuiamo con gli esempi delle istruzioni:
  672. Ci sono comandi come ADD e SUB, che significano ADDIZIONA E SOTTRAI, ad
  673. esempio SUB #10,ENERGIA sottrarra' 10 al valore dell'energia; ci sono le
  674. moltiplicazioni e le divisioni con MULS,MULU,DIVS e DIVU, e le operazioni
  675. logiche OR, AND, NOT ed altre. JMP significa JUMP, ovvero salta ad
  676. eseguire ad una certa locazione (esempio JMP $40000), JSR invece significa
  677. esegui una routine ad una data locazione fino a che non trovi un RTS,
  678. ovvero "ritorna che e' finita la routine", e l'esecuzione continuera' dopo
  679. il JSR; BRA fa la stessa cosa di JSR e BSR fa come JSR.
  680. TST significa TESTA rispetto a zero, ovvero controlla se una data
  681. locazione o registro e' uguale a zero; questa istruzione o l'istruzione
  682. CMP, ovvero COMPARA qualcosa con qualcosaltro, e' seguita di solito da un
  683. salto condizionato: BEQ e BNE ad esempio, che significano
  684. BEQ= Salta a una certa locazione se e'vera la condizione (BRANCH IF EQUAL)
  685. BNE= Salta se non e' vera (BRANCH IF NOT EQUAL). Si creano cosi' delle
  686. diramazioni varie; facciamo un esempio stupido:
  687.  
  688. Principale:
  689.  BSR CAMPANE        ; BSR fa saltare sotto la label CAMPANE, dopodiche'
  690.              ; ritorna qua ad eseguire BSR aspettamouse
  691.  BSR aspettamouse    ; Aspetta che sia premuto il MOUSE
  692.  BSR PAVAROTTI
  693.  RTS     ; torna all'asmone o al workbench
  694.  
  695. aspettamouse:
  696.  controlla se il tasto del mouse e' premuto
  697.  se non e' premuto vai a aspettamouse, ossia fai il girotondo fino a che
  698.  non e' premuto il mouse. (in questo caso si mette un "BNE aspettamouse")
  699.  RTS      ; fine subroutine aspettamouse, torna sotto il BSR
  700.  
  701. CAMPANE:
  702.  dindon    ; una routine che suona dindon
  703.  RTS
  704.  
  705. PAVAROTTI:
  706.  AAAAAHHHHHHHHH    ; una routine che fa cantare Pavarotti
  707.  RTS
  708.  
  709.  END    ; Indica la fine del listato, si puo' anche non metterlo.
  710.  
  711. (quello che viene scritto sotto l'END non viene letto ne' assemblato)
  712.  
  713. ordunque, eseguendo questo ipotetico programma, si puo' dire che "Principale"
  714. e' la routine, appunto, principale, che richiama 3 routines (parti del 
  715. programma a cui viene dato un nome, ad esempio PAVAROTTI) in sequenza:
  716. all'inizio il processore salterebbe sotto CAMPANE: e suonerebbe
  717. le campane, poi trova un RTS e torna sotto BSR CAMPANE, dove trova un altro
  718. BSR che lo porta sotto "aspettamouse:" che e' una routine che fa un
  719. ciclo fino a che non e' premuto il tasto del mouse... il processore controlla
  720. miliardi di volte il mouse e se non e' premuto ritorna sempre a controllare
  721. senza sosta; quando il mouse viene calpestato (premuto) la situazione cambia,
  722. perche' si esce dal ciclo infinito ASPETTAMOUSE, e si arriva al suo RTS, ossia
  723. all'uscita, che lo fa tornare a PRINCIPALE sotto il "bsr aspettamouse" che
  724. abbiamo superato (il processore esegue sempre l'istruzione seguente, ossia
  725. sotto, e anche quando torna da un BSR, ossia dall'esecuzione di certe
  726. istruzioni messe in altro luogo) e trova l'ennesimo BSR che lo porta a far
  727. cantare pavarotti.
  728. Infine tornato dal concerto di Pavarotti trova un RTS, che lo fa uscire da
  729. PRINCIPALE e quindi torna all'asmone o al workbench: IL PROGRAMMA e' finito.
  730.  
  731. Ora spieghero' meglio come si sposta il processore tra le varie istruzioni:
  732. Nel caso "BEQ label", si puo' parlare di diramazione, infatti a questo punto si
  733. possono prendere 2 vie: immaginatevi proprio un albero, di quelli secchi senza
  734. foglie, una quercia secolare, con il tronco nodoso, che a un certo punto si
  735. divide in 2 rami, poi ognuno di questi 2 rami si divide in 2, e cosi' via.
  736. quando arriviamo al beq e' come se fossimo una formichina che e' partita
  737. dall'inizio del programma, ossia dalla base dell'albero, in cui c'e' il nostro
  738. formicaio START:, e siamo arrivati alla prima DIRAMAZIONE: a questo punto o
  739. scegliamo di proseguire sul ramo destro o su quello sinistro. Questa scelta
  740. il 68000 la fa in base al risultato della condizione, sia essa un CMP o un TST:
  741.  
  742. INIZIO:         ; formicaio nell'erbetta
  743. ...
  744. ...
  745.   TST.B LABEL30       ; Il byte della LABEL30 e'= 0??? (condizione esempio)
  746.   BEQ   RAMODESTRO    ; se si, allora salta a RAMODESTRO
  747.   ....                ; non e'=0, allora eseguiamo il RAMOSINISTRO
  748.                 ; (significa che il byte e' un numero da $01 a $FF)
  749.   .... (Istruzioni del RAMOSINISTRO)
  750.   rts  Fine, usciamo: abbiamo percorso il RAMOSINISTRO e non quello DESTRO
  751.  
  752. RAMODESTRO:
  753.   ...  (Istruzioni del RAMODESTRO)
  754.   ...
  755.   rts  Fine, abbiamo percorso il RAMODESTRO e non quello SINISTRO
  756.  
  757. In questo caso una condizione di TST (confronta con 0) e di CMP (confronta il
  758. primo operando col secondo) seguita da un BEQ (se si, salta a...) o BNE (se no,
  759. salta a...), serve a scegliere se eseguire una certa serie di istruzioni o
  760. un'altra, se prendere una via o un'altra.
  761. Abbiamo gia' usato il BNE per fare un ciclo (o loop) in cui invece un certo
  762. numero di istruzioni sono eseguite ripetutamente fino a che non e' verificata
  763. la condizione, per esempio il loop che aspetta che sia premuto il mouse.
  764. Il Ciclo puo' essere paragonato, anziche' ad una formichina che sale un albero,
  765. ad un ROBOT che ha la pazienza di fare anche un miliardo di volte la stessa
  766. cosa senza stancarsi o scioperare, ad esempio:
  767.  
  768. VAI IN CUCINA, CONTROLLA SE LA TORTA E' COTTA, SE NON E' COTTA TORNA IN SALOTTO
  769. E TOGLI LE PULCI AL CANE PER 30 SECONDI, DOPODICHE'
  770. VAI IN CUCINA, CONTROLLA SE LA TORTA E' COTTA, SE NON E' COTTA TORNA IN SALOTTO
  771. E TOGLI LE PULCI AL CANE PER 30 SECONDI, DOPODICHE'
  772. VAI IN CUCINA, CONTROLLA SE LA TORTA E' COTTA, SE NON E' COTTA TORNA IN SALOTTO
  773. E TOGLI LE PULCI AL CANE PER 30 SECONDI, DOPODICHE'
  774. VAI IN CUCINA, CONTROLLA SE LA TORTA E' COTTA, SE NON E' COTTA TORNA IN SALOTTO
  775. E TOGLI LE PULCI AL CANE PER 30 SECONDI, DOPODICHE'
  776. VAI IN CUCINA, CONTROLLA SE LA TORTA E' COTTA, SE NON E' COTTA TORNA IN SALOTTO
  777. E TOGLI LE PULCI AL CANE PER 30 SECONDI, DOPODICHE'...
  778.  
  779. Come si vede un essere umano si ribellerebbe a fare per il tempo necessario
  780. alla cottura di una torta un vai e vieni simile in continuazione, ma il 68000
  781. non batte ciglio. Quando finalmente la torta e' cotta, si verifica il BEQ,
  782. e il ROBOT salta alla routine TOGLILADALFORNOSENZASCOTTARTIEMETTILAINTAVOLA:.
  783.  
  784. Potete intuire che con delle diramazioni qua e la', anche dentro loop piu' o
  785. meno grandi, si puo' fare una struttura complicata che soddisfa qualsiasi tipo
  786. di necessita', basti pensare alla complessita' dei programmi che simulano lo
  787. sviluppo di una citta', che a seconda di migliaia di situazioni simula il
  788. comportamento dei cittadini. Tutto questo e' possibile tramite diramazioni
  789. alle volte connesse o cicliche tra di loro.
  790.  
  791. I rami, ossia i pezzi di istruzioni eseguiti quando sono verificati i BEQ o
  792. i BNE che li richiamano, o semplicemente perche' sono trovate durante il
  793. cammino del 68000, sono chiamate ROUTINE o SUBROUTINE, cioe' pezzi di
  794. programma fatti di un certo numero di istruzioni che eseguono un dato compito,
  795. nel caso del ciclo del ROBOT, le istruzioni che fanno togliere la torta dal
  796. forno potrebbero essere isolate in una unica ROUTINE, che potrebbe essere
  797. eseguita ogni volta che e' necessario togliere la torta dal forno.
  798. Infatti l'utilita' delle ROUTINE e specialmente delle SUBROUTINE isolate sta
  799. proprio nel non dover riscrivere ogni volta che si deve togliere la torta dal
  800. forno la stessa serie di istruzioni, ad esempio.
  801. Queste istruzioni le possiamo isolare, e metterle da parte dandogli un
  802. nome, assegnandogli cioe' una LABEL all'inizio, e decidendone una fine con
  803. l'istruzione RTS. Diamo una definizione alla parola SUBROUTINE:
  804. -Dicesi subroutine di un blocco di istruzioni alle quali e' stato dato un nome,
  805. facendola iniziare con una LABEL, ossia un nome a piacere seguito dai :, e
  806. finire con una speciale istruzione di ritorno, l'RTS (ReTurn from Subroutine),
  807. e solitamente si fa eseguire con l'istruzione BSR, seguita dal nome della
  808. subroutine; dopo aver eseguito il BSR, il processore tornera' ad eseguire le
  809. istruzioni sotto il BSR che hanno fatto eseguire la subroutine stessa.
  810. Questo si puo' paragonare al comandante di un sommergibile, che in questo caso
  811. e' il programma principale, il quale dando gli ordini esegue delle subroutine,
  812. ad esempio immaginatevi che il comandante abbia visto al periscopio una nave
  813. nemica, a questo punto fara' un BSR ArmateSiluri, ossia dara' il comando di
  814. armare i siluri. Fino a che la subroutine che arma i siluri non sara' eseguita
  815. non potra' procedere. Una volta avvisato che sono stati armati, il comandante,
  816. ossia il programma principale, continuera' la procedura: ossia dare BSR DESTRA
  817. e BSR SINISTRA al reparto macchinisti fino a che la nave non si trova sulla
  818. traiettoria dei siluri; questo lo potremmo paragonare ad un ciclo in cui c'e'
  819. un CMP NAVE,SILURI seguito da un BNE SPOSTASOTTOMARINO, ossia: "la LABEL che
  820. contiene la posizione della nave e' uguale al contenuto della LABEL che
  821. contiene la posizione che raggiungeranno i siluri?", se non ancora (BNE),allora
  822. spostati ancora, cioe' torna alla routine che controllera' se siamo piu'
  823. a destra o piu' a sinistra, e di conseguenza esegui le subroutine SINISTRA
  824. e DESTRA. Questo ciclo e' simile a quello del ROBOT che aspettava che la torta
  825. fosse cotta, ma in questo caso invece di aspettare la cottura siamo noi che
  826. attivamente dobbiamo raggiungere la posizione esatta, come nel ciclo che
  827. aspetta il MOUSE siamo noi che lo dobbiamo premere per fermarlo.
  828. Eravamo rimasti al ciclo di allineamento: all'improvviso il comandante da il
  829. comando di lanciare i siluri! (BSR FUORIUNO, BSR FUORIDUE).
  830. BOOOOOOOOOOM... Ha funzionato... morti da tutte le parti, calzini galleggianti,
  831. vedove e orfani sparse per tutta la Germania (nei film muoiono sempre i
  832. tedeschi), un relitto in fondo al mare.
  833. TRANQUILLI! Era solo una simulazione al computer ben riuscita.
  834.  
  835. Se siete entrati nella logica del processore, il gioco e' fatto.
  836. Tutto quello che vedete girare sul computer, sia un programma per le previsioni
  837. del tempo, una demo con cubi e palline, un gioco di azione, e' fatto di pezzi
  838. di programma che sono eseguiti ciclicamente o sequenzialmente, a seconda dei
  839. responsi delle varie condizioni TST, BTST, CMP. Dunque ogni tipo di operazione
  840. e di decisione, di qualunque ordine di complessita', e fatto di un certo numero
  841. di condizioni semplici, considerando che ogni subroutine puo' essere fatta con
  842. altre subroutine piu' piccole, ad esempio TOGLILATORTADALFORNO:
  843.  
  844. TOGLILATORTADALFORNO:
  845.   BSR SpengiIlForno
  846.   BSR ApriIlForno
  847.   BSR PrendiLaTorta (tanto e' un robot e non si scotta)
  848.   BSR PosaLaTortaSulTavolo
  849.   BSR RichiudiIlForno
  850.   rts
  851.  
  852. A sua volta le subsubroutine possono essere fatte di altre subroutine:
  853.  
  854. SpengiIlForno:
  855.  BSR VaiSull'interruttore
  856.  BSR GiraloVersoSinistra
  857.  rts
  858.  
  859. La maggior utilita' delle subroutine sta nel rendere piu' chiaro il programma,
  860. dividendolo in parti logiche, e nella possibilita' di farsi una raccolta di
  861. routines che possono essere usate per altri programmi, ad esempio se avete
  862. una routine che legge la posizione del joystick la potete riutilizzare in
  863. tutti i giochi che farete, con lievi modifiche se necessario, allo stesso modo
  864. la routine che suona la musica, o quella che fa camminare un ometto sul video.
  865.  
  866. Questo e' per dare un'idea del continuo eseguire e girovagare a seconda
  867. delle condizioni vere o false del povero microprocessore.
  868. Quando saltellando qua e la' c'e' un errore, ad esempio salta in una
  869. zona con dati caricati male da disk o dove il programmatore ha fatto
  870. cilecca, allora appare il mitico GURU MEDITATION, o SOFTWARE FAILURE
  871. nella sua inquietante finestra rossa lampeggiante.
  872. La memoria riscrivibile (RAM) puo' essere modificata, e si divide in
  873. CHIP ram e FAST ram, come gia' detto.
  874. La differenza e' che la GRAFICA e i SUONI devono essere in CHIP RAM,
  875. mentre le istruzioni del processore possono essere sia in CHIP che in FAST.
  876. Per esempio l'Amiga 500 vecchio 1.2 o 1.3 ha 512Kb di RAM, ovvero mezzo
  877. mega, e se si espande si arriva ad un mega di RAM, ma gli altri 512k sono
  878. FAST, e' per quello che ad esempio con il DeLuxe Paint si finisce la
  879. memoria prima con 1MB diviso in 512k CHIP e 512k FAST rispetto ad un
  880. a500+ che ha invece 1MB tutto di CHIP: la memoria nel vecchio 500 avanza,
  881. ma e' di tipo FAST e non serve ad aprire un nuovo schermo, quindi dice
  882. che non c'e' memoria. Quando si programma se si prova a visualizzare
  883. grafica messa in FAST succede il finimondo, di tutto tranne visualizare
  884. quell'immagine. La memoria e' fatta a blocchi di varie misure, ad
  885. esempio su un a500 vecchio i primi 512k di chip ram vanno dall'indirizzo
  886. $00000 a $80000 e i 512k di espansione da $c00000 a $c80000: il sistema
  887. operativo sa dove sta la memoria e carica i programmi automaticamente
  888. nelle zone vuote, ad esempio caricando un programma dal WorkBench o dal
  889. CLI o SHELL i dati dal dischetto saranno trasferiti (grazie al kickstart)
  890. in memoria, a seconda che sia richiesta memoria CHIP o FAST, dopodiche' il
  891. processore saltera' al punto in memoria dove ha caricato, (o meglio copiato
  892. dal dischetto) il programma. All'utente rimane oscuro in che punto della
  893. memoria sia stato messo il programma e dove il microprocessore stia lavorando.
  894. Ho detto che la memoria chip nel vecchio 500 va da $00000 a $80000, la
  895. memoria infatti e' divisa in parti, come una strada con tante casine
  896. le quali abbiano il loro indirizzo: non a caso si chiamano indirizzi
  897. o locazioni di memoria (ADDRESS in inglese): all'inizio della strada
  898. c'e' la casa 0, che contiene un byte, la casa dopo ha l'indirizzo 1,
  899. che contiene un altro byte, e cosi' via. E' usato pero' il sistema di
  900. numerazione ESADECIMALE, cioe' in base 16. Questo non e' un problema,
  901. perche' da ASMONE si puo' convertire il numero in qualsiasi momento
  902. usando il comando "?": facendo "?$80000" si avra' un 524288 in
  903. decimale, che corrisponde a 1024*512, cioe' mezzo Kb o "KAPPA RAM",
  904. appunto 1024 bytes, moltiplicato per 512. $100000 invece e' il
  905. doppio, ossia un mega... provate ?$80000*2 ("*" ovvero "MOLTIPLICATO").
  906. I numeri esadecimali sono preceduti dal dollaro, come hai visto, i
  907. numero decimali non sono preceduti da nulla, quelli binari da un %.
  908. Queste cose sono basilari: come per le distanze esiste il metro,
  909. il decametro ed il chilometro, per la memoria esiste il BIT, il BYTE,
  910. la WORD e la LONGWORD. Il bit e' la parte piu' piccola di memoria;
  911. il BYTE, composto da 8 bit, e' una unita' che ha il suo indirizzo:
  912. il processore cioe' puo' dire: muovi(o meglio copia) il byte che e'
  913. nella casina in "via della memoria n10" nella casina in "via della
  914. memoria n16", in questo caso ha copiato gli otto bit che erano nel
  915. byte 10 (ovvero $A in esadecimale o HEXadecimal) nel byte 16.
  916. Per evitare confusioni, facciamo l'esempio inequivocabile: i bit
  917. possono essere a 0 o ad 1; nel byte 10 i bit erano: 00110110, nel
  918. byte 16 invece 11110010, dopo il MOVE.B 10,16 il byte 10 rimane
  919. 00110110, il byte 16 diventa 00110110. il .B al MOVE significa che
  920. viene mosso un BYTE, cioe' la parte piu' piccola che si possa copiare.
  921. si puo' anche fare un MOVE.W ed un MOVE.L, ossia muovere una WORD (.w)
  922. o una LONGWORD (.L), che non sono altro che: 1 word = 2 bytes, una
  923. longword = 4 bytes, ovvero 2 word. Allora se si fa un MOVE.W 10,16,
  924. nel byte 16 verra' copiato il byte 10, nel byte 17 il byte 11, ossia
  925. viene spostato un blocco di 2 bytes. Nel caso di un MOVE.L vengono
  926. spostati 4 bytes, ossia: nel byte 16 il byte 10, nel 17 l'11, nel 18
  927. il 12, nel 19 il 13. Facciamo uno schemino:
  928.  
  929. PRIMA DEL MOVE.L 10,16 ;  08/09/10/11/12/13/14/15/16/17/18/19/20
  930.                  C  A  N  E       G  A  T  T  O
  931.  
  932. DOPO IL MOVE.L 10,16 ;    08/09/10/11/12/13/14/15/16/17/18/19/20
  933.                  C  A  N  E       C  A  N  E  O
  934.  
  935. Se facciamo MOVE.B 20,14 ;08/09/10/11/12/13/14/15/16/17/18/19/20
  936.                  C  A  N  E  O     C  A  N  E  O
  937.  
  938. Nella nostra supposizione le locazioni 08,09,14,15 erano azzerate,
  939. mentre le 10-13 e le 16-20 avevano un valore, qua delle lettere
  940. per esempio. concludiamo con un MOVE.W 8,10:
  941.  
  942.              ;08/09/10/11/12/13/14/15/16/17/18/19/20
  943.                        N  E  O     C  A  N  E  O
  944.  
  945. Con 3 istruzioni abbiamo trasformato CANE GATTO in NEO CANEO!!!!!
  946. A parte gli scherzi, non proseguite a leggere fino a che non
  947. vi e' rimasto impresso nella memoria cerebrale il funzionamento della
  948. memoria sintetica!!!! fate un po di giochetti coi move.x, che vi fa bene!
  949. Provate ad esempio a trasformare ANTANI in TANTI NANI con vari MOVE, oppure
  950. SBLINDO in DOBLONI, oppure RENULOZ in ZUZZURELLONE, eccetera.
  951. Ricordatevi che le ISTRUZIONI del processore devono essere ad indirizzi
  952. pari, tipo 2,4,6... ossia allineati a WORD, oppure va tutto in GURU.
  953. Per togliere dubbi, nella memoria ci sono una serie di valori uno dietro
  954. l'altro, che possono essere istruzioni del 68000, o dati come ad esempio
  955. le SINUSTAB prima citate, figure, suoni, scritte da visualizzare...
  956. le istruzioni in memoria non sono nella forma MOVE.B 10,16, quella
  957. e' una versione DISASSEMBLATA, in memoria ad esempio quella istruzione occupa
  958. 10 bytes, ed e': $13,$F9,$00,$00,$00,$0A,$00,$00,$00,$10, in cui $13f9
  959. significa in grandi linee MOVE.B, $0000a e' 10 in esadecimale e $10 e' 16
  960. in esadecimale... allo stesso modo ogni istruzione ha i suoi bytes, ad
  961. esempio l'istruzione NOP, ossia no operation, che non fa nulla, in memoria
  962. e' $4e71. Anticipo che oltre che operare sulla memoria il processore ha
  963. a disposizione dei registri, denominati registri dati e registri indirizzi,
  964. che sono 16 e lunghi una longword ciascuno, chiamati a0,a1,a2,a3,a4,a5,a6,a7
  965. gli Address reg, d0,d1,d2,d3,d4,d5,d6,d7 i data reg; sono dentro il processore
  966. e quindi sono molto piu' veloci le operazioni tra 2 registri di quelle tra 2
  967. indirizzi di memoria, ad esempio move.l d0,d2 sara' piu' veloce di
  968. move.l $100,$200; si preferisce quindi fare operazioni mettendo i numeri
  969. nei registri piuttosto che nella memoria, se possibile.
  970.  
  971. la ROM come gia' detto non si puo' scrivere, cioe' un MOVE che scrive
  972. nella ROM non ha effetto: un move su $FC0000 o su $f80000 non serve a niente.
  973. Si possono solo eseguire le ROUTINES contenute nel ROM. Ma ESSENDO IL KICK
  974. DIVERSO IN OGNI VERSIONE, MAI SI DEVE SALTARE AL KICK DIRETTAMENTE.
  975. Il sistema operativo e' fatto in modo che le routines, ossia i singoli
  976. programmi presenti nel kickstart, possano essere chiamate nello stesso
  977. modo qualunque sia il kick e ovunque sia collocato in memoria: questo
  978. viene fatto tramite dei JSR, ossia dei JUMP TO SUBROUTINE (Salta ad
  979. un indirizzo, dopodiche' ritorna e continua da sotto il JSR), che sono
  980. fissi partendo pero' dall'indirizzo presente nell' indirizzo 4, in cui
  981. e' sempre presente l'indirizzo da cui regolarsi per fare i giusti JSR
  982. per eseguire le routines del kickstart. I programmi per aprire le
  983. finestre del workbench o per stampare caratteri, per leggere o scrivere
  984. un file su disco devono chiamare la routine presente nel CHIP del
  985. kickstart ROM ogni volta, passandogli ad esempio il nome del file da
  986. caricare o le dimensioni della finestra da aprire; invece quando un
  987. gioco o una demo "SALTA" il sistema operativo non vengono fatte
  988. chiamate al kickstart: ad esempio il noto XCOPY apre un suo
  989. schermo, ed appare evidente che toglie di mezzo il multitasking e
  990. non ha le finestrine ed i menu' da tasto destro come i programmi
  991. da sistema operativo. Allo stesso modo un gioco come quelli che ho
  992. menzionato prima, come SENSIBLE SOCCER, funzionerebbe anche se dopo il
  993. boot(la partenza) si rimuovesse il chip del kickstart, in quanto non vengono
  994. chiamate routines per aprire finestre o caricare file: le cose che appaiono a
  995. video sono controllate una per una e i dati dal disco sono caricati non come
  996. files DOS, ma come tracce lette direttamente spostando le testine del
  997. DRIVE dando corrente o meno ai pin del cavo. Appare chiara questa
  998. differenza? Tra i programmi o giochi che USANO il sistema operativo,
  999. ossia richiamano continuamente routines nella ROM e mantengono il
  1000. multitasking e le finestre, e gli altri prog. che non aprono finestre
  1001. o le aprono in maniera diversa dal WorkBench, e non possono essere eseguiti
  1002. insieme al Deluxe Paint, scambiando la finestra o spostandola in basso??
  1003. Insomma la ROM si preoccupa di dialogare con l'hardware per noi se glielo
  1004. chiediamo, e fa un certo numero di cose prestabilite, mentre se decidiamo
  1005. di dialogare NOI con l'hardware, possiamo fare tutto il possibile, sempre
  1006. che ne siamo capaci!!!
  1007.  
  1008. Ordunque ci occuperemo di fare codice senza usare la ROM. Ma allora useremo
  1009. solo il microprocessore? e come si fa a visualizzare un immagine o suonare
  1010. una musica? con dei MOVE????
  1011. Ora entrano in gioco i CHIP CUSTOM!!!
  1012. questi CHIP si chiamano PAULA, AGNUS e DENISE, inoltre ci sono altri 2 CHIP
  1013. detti CIAA E CIAB. Questi furboni sono quelli che fanno suonare l'amiga
  1014. e che gli fanno visualizzare tutti quei colori sullo schermo.
  1015. La maggior parte dei registri in questione si trovano alla locazione
  1016. $dff000 fino a $dff1fe, altri riguardanti le porte seriali, parallele, e
  1017. dei disk drives si trovano in zona $bfexxx o $bfdxxx.
  1018. Una volta imparate tutte le istruzioni del 68000 si possono costruire programmi
  1019. grossi come case, ma se si sposta memoria qua e la non si visualizza ne' si
  1020. suona nulla! col processore bisogna pilotare questi chip; uno principale e'
  1021. il BLITTER, che si occupa di disegnare le linee, copiare pezzi di memoria
  1022. come scroll o ometti in giro per lo schermo, riempire aree (i solidi 3d sono
  1023. disegnati e riempiti con il blitter; il processore si occupa di calcolare le
  1024. coordinate delle linee che poi il blitter disegna).
  1025. Quello che pero' visualizza il tutto e che determina i colori e' il COPPER:
  1026. per fare un esempio il $dff180 corrisponde al colore 0 ed il $dff182 al
  1027. colore 1, mentre nel $dff006 c'e' la linea dove il pennello elettronico e'
  1028. arrivato nel disegnare lo schermo, che viene disegnato 50 volte al secondo:
  1029. questi registri infatti sono a SOLA lettura o a SOLA scrittura, ad esempio
  1030. nel $dff180 si puo' mettere un valore, ma non si puo' leggere che valore c'e',
  1031. lo stesso vale per il $dff006, sul quale non si puo' scrivere; per cambiare
  1032. la posizione al pennello elettronico esiste comunque un apposito registro,
  1033. cosi' per molti altri. Nei registri $bfexxx si puo' controllare il disk
  1034. drive o le varie porte, tra cui quella del mouse: ad esempio al bit 6
  1035. dell'indirizzo $bfe001 corrisponde lo stato del bottone sinistro del mouse,
  1036. se questo e' premuto o no, e si puo' controllare col processore ed aspettare
  1037. che sia premuto prima di uscire. Ed e' questo il primo esempio di
  1038. programmazione che puoi analizzare caricando LEZIONE1a.s, il primo sorgente
  1039. del corso, che comprende insieme un ciclo con il 68000, l'utilizzo di
  1040. un registro $dffxxx e di uno $bfexxx. (caricatelo in un altro buffer di
  1041. testo come spiegato sotto).
  1042.  
  1043. Un breve accenno su come usare l'assemblatore, in questo caso ASMONE:
  1044. All'inizio si deve selezionare se allocare memoria CHIP o FAST, e' bene
  1045. selezionare quella chip per i sorgenti del corso, a seconda di quanta ne
  1046. avete, selezionate il numero di Kb, almeno 250.
  1047. Per selezionare una directory o un drive usate il comando "v", per esempio
  1048. per andare nella directory delle lezioni fate un "V df0:LEZIONI", per andare
  1049. nella directory dei sorgenti fate un bel "V df0:SORGENTI", poi per leggere
  1050. il sorgente o la lezione usate "R", e selezionatelo con la finestrella.
  1051. Si puo' scambiare con ESC tra la funzione di editor e la linea di comandi;
  1052. cioe' premete ESC e potete scorrere o modificare il testo, ripremete ESC
  1053. e tornate alla linea di comandi dove potete ad esempio ASSEMBLARE il
  1054. listato con "A", dopodiche' per farlo eseguire dovete premere "J". (JSR!!)
  1055. Potete anche caricare simultaneamente 10 testi, siano essi sorgenti o lezioni,
  1056. perche', quando siete in modo EDIT, quando cioe' potete scorrere il testo
  1057. con il cursore e potete cambiarlo, se premete F2 scambierete listato, e
  1058. andrete al secondo, che in questo caso sara' vuoto: se premete nuovamente F1
  1059. ritornate al testo caricato prima: in questo modo potete, ad esempio, tenere
  1060. nel buffer 1 (ossia listato 1 richiamabile con F1) la Lezione1.TXT, mentre
  1061. nel buffer 2, selezionabile con F2, potete caricare il listato inerente alla
  1062. lezione1, ossia Lezione1a.s. In seguito potete mettere lezione1 nel buffer 1,
  1063. lezione2 nel buffer2, nel buffer 3,4,5 dei listati della lezione2, eccetera,
  1064. quindi potrete consultare la lezione, poi premendo un F4 o un F5 verificare
  1065. subito l'esecuzione di un listato, o ritornare a vedere una cosa della lezione1
  1066. che non ricordate, eccetera.
  1067. NOTA: per scorrere di pagina in pagina usate i cursori (frecce) piu' lo SHIFT,
  1068. ossia, per chi non aveva il C64, il tasto grande sopra ALT con la freccia.
  1069. Vi spiego che succede quando fate "A": il listato (o sorgente) e' in formato
  1070. testo normalissimo, ed e' fatto di parole chiave che sono i comandi o
  1071. altri simboli che conosce l'assemblatore... per segnare un gruppo di istruzioni
  1072. o una "variabile", o l'inizio di una tabella, o comunque avere un riferimento
  1073. di un preciso punto del listato, si fanno delle ETICHETTE o LABEL, che non
  1074. devono avere spazi dall'inizio del bordo, e devono finire con i : (DUE PUNTI).
  1075. Il nome della label e' a scelta, ma non si deve dare un nome che sia uguale
  1076. ad un comando 68000!!! esempio:
  1077.  
  1078. WAITMOUSE:            ; la label
  1079.     btst    #6,$bfe001    ; tasto sinistro premuto?
  1080.     bne.s    WAITMOUSE    ; se no torna a WAITMOUSE (ripeti il btst)
  1081.     rts            ; Esci
  1082.  
  1083. Vi ricordo che i comandi devono avere una spaziatura, in questo caso ho
  1084. usato il TAB (Il tasto sopra CTRL e CAPS LOCK), che fa 8 spazi con un colpo
  1085. solo... Notate che non vanno messi i : (due punti) finali al nome della
  1086. label (o etichetta) quando viene richiamata, ma solo a se stessa.
  1087. Dunque, una volta editato il sorgente, va ASSEMBLATO con "A"; questa
  1088. operazione fa leggere all'ASMONE il testo, e lo trasforma in codice, cioe'
  1089. nei bytes che saranno letti dal 68000 ed eseguiti come istruzioni.
  1090. Una volta assemblato, il suddetto codice e' in un punto della memoria che
  1091. si puo' vedere con "=R", e con il comando "J" il processore salta a quel punto
  1092. della memoria ed esegue il nostro programma. Se l'ASMONE trova un errore
  1093. nel listato non assembla tutto fino a che non viene corretto l'errore.
  1094. I sorgenti del corso funzionano anche con altri assemblatori come DEVPAC 3
  1095. e MASTERSEKA, con tutti i kickstart e con tutti gli Amiga, compresi quelli
  1096. AGA come il 1200 o il 4000.
  1097.  
  1098. Se avete verificato il funzionamento di Lezione1a.s, caricate in un altro
  1099. buffer di testo (quello F3, ad esempio) il file LEZIONE2.TXT con "R".
  1100.  
  1101. Se mancasse memoria quando scambiate buffer, significa che avete selezionato
  1102. troppa memoria all'inizio (al messaggio ALLOCATE), e non ne e' rimasta per la
  1103. RAM DISK. La prossima volta selezionatene meno.
  1104.  
  1105.